perm filename UTJP[S1,ALS] blob
sn#436731 filedate 1979-04-26 generic text, type C, neo UTF8
COMMENT ā VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 UTJP :
C00005 ENDMK
Cā;
UTJP :
begin
if TOP <> BOT then
ERROR (WTJP_WITH_NONEMPTY_STACK);
LABNUM := LABELNUMBER(NAM1);
with STK[TOP] do
begin
if DTYPE <> TYPB then
ERROR (WTJP_NEEDS_BOOLEAN);
if BREPRES = BINTVAL then
if IS_CONSTANT(TOP) then
if ADDRORVAL.FPA.MEMADR.DSPLMT <> 1 then
(*TJP, arg false, so no jump*)
else
begin (*TJP, arg true, so jump always*)
JUMPLOC := NEWINSTREC;
EMITJOP (XJMPA, 0, UNUSED_OP, ZERO_OP, nil);
JUMP_TO_LABEL_RECORD_OR_FIX (JUMPLOC, LABNUM);
end
else
begin (*non-constant bintval*)
GET_OPERAND (OPND1, TOP);
JUMPLOC := NEWINSTREC;
EMITJOP (XJMPZ_NEQ_Q, 0, OPND1, ZERO_OP, nil);
JUMP_TO_LABEL_RECORD_OR_FIX (JUMPLOC, LABNUM);
end (*non-constant bintval*)
else
begin (*bjump representation*)
if BJUMPON then
begin
INVERT_SKIP (BFALLTHRUSKIPLOC);
BJUMPON := false;
end;
PTR := BFALSELIST.FIRST;
while PTR <> nil do
begin
NEXT := JUMPSKIPDEST(PTR);
FIXJOP (PTR, NEWINSTREC);
PTR := NEXT;
end;
PTR := BTRUELIST.FIRST;
while PTR <> nil do
begin
NEXT := JUMPSKIPDEST(PTR);
JUMP_TO_LABEL_RECORD_OR_FIX (PTR, LABNUM);
PTR := NEXT;
end;
FALLTHRUJUMP := NEXT_INSTRUCTION(BFALLTHRUSKIPLOC);
JUMP_TO_LABEL_RECORD_OR_FIX (FALLTHRUJUMP, LABNUM);
end (*bjump representation*);
end (*with STK[TOP] do*);
FREEDATUMREGS (TOP);
POPTOP;
end (*UTJP*);